//package com.share.config.websocket;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * 上述代码可能会有疑问：session和userId两个字段是不是安全的？多人连接，后面的会不会覆盖掉前面session和userId
// * websocket是原型模式，@ServerEndpoint每次建立双向通信的时候都会创建一个实例
// *
// * @author 01401061 - 孙艳强
// * @date 2020/11/26 16:10
// */
//@Slf4j
//@Component
//@ServerEndpoint("/ws/{userId}")
//public class WsServer_Example {
//
//    /**
//     * concurrent包的线程安全Set，用来存放每个客户端对应的WebSocket对象。
//     */
//    private static ConcurrentHashMap<String, WsServer_Example> webSocketMap = new ConcurrentHashMap<>();
//
//    /**
//     * 与某个客户端的连接会话，需要通过它来给客户端发送数据
//     */
//    private Session session;
//
//    /**
//     * 接收userId
//     */
//    private String userId = "";
//
//    /**
//     * 连接成功
//     *
//     * @param session
//     */
//    @OnOpen
//    public void onOpen(Session session, @PathParam("userId") String userId) {
//        this.session = session;
//        this.userId = userId;
//        if (webSocketMap.containsKey(userId)) {
//            webSocketMap.remove(userId);
//        }
//        //加入set中
//        webSocketMap.put(userId, this);
//
//        log.info("用户连接:" + userId + ",当前在线人数为:" + webSocketMap.size());
//
//
//        //给客户端发个消息
//        sendMsg2Client("连接成功");
//    }
//
//
//    /**
//     * 连接关闭
//     * 调用的方法
//     */
//    @OnClose
//    public void onClose() {
//        if (webSocketMap.containsKey(userId)) {
//            webSocketMap.remove(userId);
//        }
//        log.info("连接关闭,用户退出:" + userId + ",当前在线人数为:" + webSocketMap.size());
//    }
//
//    /**
//     * @param session
//     * @param error
//     */
//    @OnError
//    public void onError(Session session, Throwable error) {
//        log.error("用户错误:" + this.userId, error);
//    }
//
//    /**
//     * 收到客户端消息后调用的方法
//     *
//     * @param message 客户端发送过来的消息
//     **/
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        log.info("收到消息,userId={},msg={}", userId, message);
//
//        //解析消息并执行
//
//        //给客户端发个消息
//        sendMsg2Client("服务端收到了" + userId + "的消息");
//    }
//
//    /**
//     * 实现服务器主动推送
//     */
//    public void sendMsg2Client(String message) {
//        try {
//            this.session.getBasicRemote().sendText(message);
//        } catch (IOException e) {
//            log.error("消息发送异常,userId={},message={}", userId, message, e);
//        }
//    }
//}
